package service

import (
	"context"
	"database/sql"
	"golang-training-camp/src/week2/models"
)

type UserService interface {
	FindUser(ctx context.Context, req *models.FindUserReq) (*models.FindUserResp, error)
}

type userService struct {
	mysqlDb *sql.DB
}

func NewUserService(mysqlDb *sql.DB) (UserService, error) {
	return &userService{
		mysqlDb: mysqlDb,
	}, nil
}

// 查询数据，指定字段名
func (s *userService) FindUser(ctx context.Context, req *models.FindUserReq) (*models.FindUserResp, error) {

	user := &models.Users{}
	row := s.mysqlDb.QueryRow("select * from users where id=?", 1)
	if err := row.Scan(&user.Id, &user.Name); err != nil {
		if err == sql.ErrNoRows {
			// 业务场景中 sql.ErrNoRows 不一定需要报错出去
			// 比如上层逻辑就是想知道这种数据是否有值
			// 没有值的话需要做逻辑处理
			return &models.FindUserResp{
				NoFindOut: true,
			}, nil
		}
		return nil, err
	}

	ret := &models.FindUserResp{
		Name: user.Name,
	}
	return ret, nil
}
